#include "time.h"
extern lv_obj_t * scr3;

lv_obj_t* label_date;       //日期label控件
lv_obj_t* label_time;       //时间label控件
lv_obj_t* label_duration;   //时长label控件

/**
*时间、日期、时长控件显示函数
*/
void lv_time()
{
    label_time = lv_label_create(scr3);//时间控件
    lv_obj_set_size(label_time, 200, 36);
    lv_label_set_text(label_time, "00:00:00");
    //放到正下方
    lv_obj_align(label_time,LV_ALIGN_BOTTOM_MID,0,-10);
    lv_obj_set_style_text_color(label_time, lv_color_make(255,255,255), 0);
    lv_obj_set_style_text_align(label_time, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN|LV_STATE_DEFAULT);

    label_date = lv_label_create(scr3);//日期控件
    lv_obj_set_size(label_date, 250, 36);
    lv_label_set_text(label_date, "2023/01/01");
    lv_obj_align(label_date,LV_ALIGN_BOTTOM_MID,0,-50);
    lv_obj_set_style_text_color(label_date, lv_color_make(255,255,255), 0);
    lv_obj_set_style_text_align(label_date, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN|LV_STATE_DEFAULT);

    label_duration = lv_label_create(scr3);//时长控件
    lv_label_set_text_fmt(label_duration, "How Long: %d min", 0);//汉字“时长”两字需要自己创建汉字库才能实现
    lv_obj_set_style_text_color(label_duration, lv_color_make(255,255,255), 0);
    lv_obj_align(label_duration, LV_ALIGN_BOTTOM_MID,50,-50);

    lv_timer_create(update_time_cb, 1000, NULL);//创建一个定时器，每秒更新一次日期、时间、时长
}


/**
*时间和日期更新回调函数
*/
void update_time_cb(lv_timer_t *timer) {
    time_t now;
    struct tm tm;

    // 获取当前本地时间
    now = time(NULL);
    localtime_r(&now, &tm);

    static time_t start_time = 0;//初始时长为0
    if (start_time == 0) {start_time = now;}

    char time_str[9]; // 存放格式化后的时间字符串，HH:MM:SS
    char date_str[20]; // 存放格式化后的日期字符串，YYYY-MM-DD 
    int total_minute = (now - start_time) / 60; // 计算累计时长（分钟）

    // 将时间格式化为字符串，精确到秒
    snprintf(time_str, sizeof(time_str), "%02d:%02d:%02d", tm.tm_hour, tm.tm_min, tm.tm_sec);
    // 将日期格式化为字符串，精确到日
    snprintf(date_str, sizeof(date_str), "%04d/%02d/%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);

    lv_label_set_text(label_time, time_str); // 更新时间标签的文本
    lv_label_set_text(label_date, date_str); // 更新日期标签的文本
    lv_label_set_text_fmt(label_duration, "How Long: %d min", total_minute);//更新时长标签的文本
}
